package com.codejiwei.core.rdd

import org.apache.spark.{SparkConf, SparkContext}

object Spark_Operator_Sample {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[1]").setAppName("Sample")
    val sc = new SparkContext(conf)

    val rdd = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

    //TODO sample从数据源中抽取一部分数据，采样
    // 第一个参数：表示抽取数据是否放回数据集中，true放回，false不放回
    // 第二个参数：基于第一个参数来判断的
    //              如果抽取放回的场合，表示期望抽取的次数
    //              如果抽取不放回的场合，表示抽取数据的概率（数据集中抽取每一个数据的概率！）
    // 第三个参数：表示抽取数据的种子（随机数），如果不传递，就是当前的系统时间
    val rdd1 = rdd.sample(false, 0) //表示抽取每个数据的概率为0
    val rdd2 = rdd.sample(false, 1) //表示抽取每个数据的概率为1
    val rdd3 = rdd.sample(false, 0.5) //表示抽取每个数据的概率为0.5
    val rdd4 = rdd.sample(false, 0.5, 1)
    val rdd5 = rdd.sample(true, 1)

    rdd1.collect().foreach(println)
    println("============================")
    println(rdd2.collect().mkString(", "))
    println("============================")
    println(rdd3.collect().mkString(", "))
    println("============================")
    println(rdd4.collect().mkString(", "))
    println("============================")
    println(rdd5.collect().mkString(", "))
    sc.stop()

  }
}
